﻿/*----------------------------------------------------------------

// 公司名称：公司名称
//
// 产品名称：Gaf
//
// 创 建 人：netcasewqs
// 创建日期：2022/3/4
// 邮    箱：netcasewqs@qq.com
//
// Copyright (C) 2022 Gaf，保留所有权利。
//
//----------------------------------------------------------------*/

namespace Gaf.Impl;

record MultiParametersMethodInvoker(MethodInfo Method, params ParameterInfo[] Parameters) : MethodInvoker(Method, Parameters.FirstOrDefault())
{
    static readonly Type ServiceProviderType = typeof(IServiceProvider).GetTypeInfo();

    protected override object Invoke(object instance, IServiceProvider? provider)
    {
        //多参数
        var args = new object[Parameters.Length];

        for (int i = 0; i < Parameters.Length; i++)
        {
            var parameter = Parameters[i];
            if (ServiceProviderType.IsAssignableFrom(parameter.ParameterType))
                args[i] = provider!;
            else
                args[i] = provider?.GetRequiredService(parameter.ParameterType)!;
        }
        return Method.Invoke(Method.IsStatic ? null : instance, args)!;
    }
}